package tools

import (
	"fmt"
	"os"
	"path/filepath"

	"github.com/mholt/archiver/v3"
)

func (t Command) Zip() {
	if len(os.Args) < 4 {
		fmt.Println("参数错误，使用方式: yt zip [源目录] [目标文件]")
		return
	}
	sourceDir := filepath.Clean(os.Args[2])
	targetFile := filepath.Clean(os.Args[3])

	// 检查源目录是否存在
	if info, err := os.Stat(sourceDir); err != nil || !info.IsDir() {
		fmt.Printf("目录 %s 不存在或无效\n", sourceDir)
		return
	}

	// 自动识别压缩格式
	format, err := archiver.ByExtension(targetFile)
	if err != nil {
		fmt.Printf("不支持的压缩格式: %v\n", err)
		return
	}

	// 创建目标目录
	if err := os.MkdirAll(filepath.Dir(targetFile), 0755); err != nil {
		fmt.Printf("创建目录失败: %v\n", err)
		return
	}

	// 执行压缩操作
	switch f := format.(type) {
	case archiver.Archiver:
		if err := f.Archive([]string{sourceDir}, targetFile); err != nil {
			fmt.Printf("压缩失败: %v\n", err)
			return
		}
	default:
		fmt.Println("不支持的压缩格式")
		return
	}

	fmt.Printf("成功压缩 %s 到 %s\n", sourceDir, targetFile)
}
